<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
    <style>
        li {
            list-style: none;
        }

        div {
            margin: 5px;
        }
    </style>
</head>

<body>
    <div id="app">
        <div>
            <p>count:{{count}}</p>
            <button @click="count++">点击</button>
        </div>
        <div>
            <div class="input-group">
                <label>user:</label>
                <input type="text" v-model="info.user">
                <span>{{info.user}}</span>
            </div>
            <div class="input-group">
                <label>pwd:</label>
                <input type="text" v-model="info.pwd">
                <span>{{info.pwd}}</span>
            </div>
        </div>
    </div>
</body>
<script>

    // 侦听器:
    // 有选择的对data中某项数据进行监听, 当监听数据发生改变之后,可以执行一些副作用操作(数据改变之后对其他操作产生的连带影响)

    // 主要侧重于数据本身发生改变之后 对其他数据造成的影响

    // 注意: 
    // Vue实例初次渲染时, 侦听器上的函数并不执行(默认->后期可以改变),监听到数据改变之后执行

    // 需求:将数组中的每个元素放到对应的li标签内
    var vm = new Vue({
        el: "#app",
        data: {
            count: 1,
            info: {
                user: "",
                pwd: "",
            }
        },
        methods: {

        },
        computed: {

        },
        watch: {
            count(newVal, oldVal) {
                console.log("count被修改了");
            },

            // 通过watch监听对象属性的变化   => Vue监听对象时,默认情况下,不会监听对象属性的变化
            // info:function(newVal, oldVal) {
            //     console.log("info被修改了");
            // },

            // 解决方法:深度监听(deep:true)  =>  监听对象属性的变化
            // a. 监听对象属性的变化
            // b. 监听数组对象中对象属性的变化 [{},{},{},{}] 


            // 默认情况下,Vue实例初次渲染时, 侦听器上的函数并不执行(默认),监听到数据改变之后执行
            // 通过配置 immediate: true, 可以在Vue实例初次渲染时执行一次侦听器上的对应函数 (注意: 此时oldVal为undefined)

            info: {
                handler: function (newVal, oldVal) {  //监听到数据改变时执行的函数
                    console.log("info被修改了", newVal, oldVal);
                },
                deep: true,  //深度监听
                immediate: true,  // Vue实例初次渲染时执行一次
            }



        }

    })



</script>

</html>